home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / misc / interfaces3_5.lha / Interfaces / Locale.mod < prev    next >
Text File  |  1994-11-06  |  14KB  |  317 lines

  1. (*
  2. (*
  3. **  Amiga Oberon Interface Module:
  4. **  $VER: Locale.mod 40.15 (6.11.94) Oberon 3.5
  5. **
  6. **   © 1993 by Fridtjof Siebert, written by Kai Bolay,
  7. **   revised and updated for V40 by hartmut Goebel
  8. *)
  9. *)
  10.  
  11. MODULE Locale;
  12.  
  13. IMPORT
  14.   e * := Exec,
  15.   d * := Dos,
  16.   u * := Utility;
  17.  
  18. CONST
  19.   localeName * = "locale.library";
  20.  
  21. (* constants for GetLocaleStr() *)
  22.   day1    * = 1;      (* Sunday    *)
  23.   day2    * = 2;      (* Monday    *)
  24.   day3    * = 3;      (* Tuesday   *)
  25.   day4    * = 4;      (* Wednesday *)
  26.   day5    * = 5;      (* Thursday  *)
  27.   day6    * = 6;      (* Friday    *)
  28.   day7    * = 7;      (* Saturday  *)
  29.  
  30.   abDay1  * = 8;      (* Sun *)
  31.   abDay2  * = 9;      (* Mon *)
  32.   abDay3  * = 10;     (* Tue *)
  33.   abDay4  * = 11;     (* Wed *)
  34.   abDay5  * = 12;     (* Thu *)
  35.   abDay6  * = 13;     (* Fri *)
  36.   abDay7  * = 14;     (* Sat *)
  37.  
  38.   mon1    * = 15;     (* January   *)
  39.   mon2    * = 16;     (* February  *)
  40.   mon3    * = 17;     (* March     *)
  41.   mon4    * = 18;     (* April     *)
  42.   mon5    * = 19;     (* May       *)
  43.   mon6    * = 20;     (* June      *)
  44.   mon7    * = 21;     (* July      *)
  45.   mon8    * = 22;     (* August    *)
  46.   mon9    * = 23;     (* September *)
  47.   mon10   * = 24;     (* October   *)
  48.   mon11   * = 25;     (* November  *)
  49.   mon12   * = 26;     (* December  *)
  50.  
  51.   abMon1  * = 27;     (* Jan    *)
  52.   abMon2  * = 28;     (* Feb    *)
  53.   abMon3  * = 29;     (* Mar    *)
  54.   abMon4  * = 30;     (* Apr    *)
  55.   abMon5  * = 31;     (* May    *)
  56.   abMon6  * = 32;     (* Jun    *)
  57.   abMon7  * = 33;     (* Jul    *)
  58.   abMon8  * = 34;     (* Aug    *)
  59.   abMon9  * = 35;     (* Sep    *)
  60.   abMon10 * = 36;     (* Oct    *)
  61.   abMon11 * = 37;     (* Nov    *)
  62.   abMon12 * = 38;     (* Dec    *)
  63.  
  64.   yesStr  * = 39;     (* affirmative response for yes/no queries *)
  65.   noStr   * = 40;     (* negative response for yes/no queries    *)
  66.  
  67.   amStr   * =  41;    (* AM                                      *)
  68.   pmStr   * =  42;    (* PM                                      *)
  69.  
  70.   softHyphen * = 43;  (* soft hyphenation                        *)
  71.   hardHyphen * = 44;  (* hard hyphenation                        *)
  72.  
  73.   openQuote  * = 45;  (* start of quoted block                   *)
  74.   closeQuote * = 46;  (* end of quoted block                     *)
  75.  
  76.   yesterdaystr * = 47;  (* Yesterday *)
  77.   todaystr     * = 48;  (* Today     *)
  78.   tomorrowstr  * = 49;  (* Tomorrow  *)
  79.   futurestr    * = 50;  (* Future    *)
  80.  
  81.   maxStrMsg  * = 51;  (* current number of defined strings *)
  82.  
  83.  
  84. (*****************************************************************************)
  85.  
  86. TYPE
  87. (* OpenLibrary("locale.library",0) returns a pointer to this structure *)
  88.  
  89.   LocaleBasePtr = UNTRACED POINTER TO LocaleBase;
  90.   LocaleBase = STRUCT (libNode * : e.Library)
  91.     sysPatches -:  BOOLEAN;   (* TRUE if locale installed its patches *)
  92.   END;
  93.  
  94.  
  95. (* This structure must only be allocated by locale.library and is READ-ONLY! *)
  96.   LocalePtr * = UNTRACED POINTER TO Locale;
  97.   Locale* = STRUCT
  98.     localeName     - : e.LSTRPTR;            (* locale's name               *)
  99.     languageName   - : e.LSTRPTR;            (* language of this locale     *)
  100.     prefLanguages  - : ARRAY 10 OF e.LSTRPTR;(* preferred languages         *)
  101.     flags          - : LONGSET;              (* always 0 for now            *)
  102.  
  103.     codeSet        - : LONGINT;              (* for now, always 0           *)
  104.     countryCode    - : LONGINT;              (* user's country code         *)
  105.     telephoneCode  - : LONGINT;              (* country's telephone code    *)
  106.     gmtOffset      - : LONGINT;              (* minutes from GMT            *)
  107.     measuringSystem- : SHORTINT;             (* what measuring system?      *)
  108.     calendarType   - : SHORTINT;             (* what calendar type?         *)
  109.     reserved0      - : ARRAY 2 OF SHORTINT;
  110.  
  111.     dateTimeFormat - : e.LSTRPTR;            (* regular date & time format  *)
  112.     dateFormat     - : e.LSTRPTR;            (* date format by itself       *)
  113.     timeFormat     - : e.LSTRPTR;            (* time format by itself       *)
  114.  
  115.     shortDateTimeFormat  - : e.LSTRPTR;      (* short date & time format    *)
  116.     shortDateFormat      - : e.LSTRPTR;      (* short date format by itself *)
  117.     shortTimeFormat      - : e.LSTRPTR;      (* short time format by itself *)
  118.  
  119.     (* for numeric values *)
  120.     decimalPoint         - : e.LSTRPTR;      (* character before the decimals   *)
  121.     groupSeparator       - : e.LSTRPTR;      (* separates groups of digits      *)
  122.     fracGroupSeparator   - : e.LSTRPTR;      (* separates groups of digits      *)
  123.     grouping             - : e.ADDRESS;      (* size of each group              *)
  124.     fracGrouping         - : e.ADDRESS;      (* size of each group              *)
  125.  
  126.     (* for monetary values *)
  127.     monDecimalPoint      - : e.LSTRPTR;
  128.     monGroupSeparator    - : e.LSTRPTR;
  129.     monFracGroupSeparator- : e.LSTRPTR;
  130.     monGrouping          - : e.ADDRESS;
  131.     monFracGrouping      - : e.ADDRESS;
  132.     monFracDigits        - : SHORTINT;       (* digits after the decimal point  *)
  133.     monIntFracDigits     - : SHORTINT;       (* for international representation*)
  134.     reserved1            - : ARRAY 2 OF SHORTINT;
  135.  
  136.     (* for currency symbols *)
  137.     monCS                - : e.LSTRPTR;      (* currency symbol                 *)
  138.     monSmallCS           - : e.LSTRPTR;      (* symbol for small amounts        *)
  139.     monIntCS             - : e.LSTRPTR;      (* internationl (ISO 4217) code    *)
  140.  
  141.     (* for positive monetary values *)
  142.     monPositiveSign      - : e.LSTRPTR;      (* indicate positive money value   *)
  143.     monPositiveSpaceSep  - : SHORTINT;       (* determine if separated by space *)
  144.     monPositiveSignPos   - : SHORTINT;       (* position of positive sign       *)
  145.     monPositiveCSPos     - : SHORTINT;       (* position of currency symbol     *)
  146.     reserved2            - : SHORTINT;
  147.  
  148.     (* for negative monetary values *)
  149.     monNegativeSign      - : e.LSTRPTR;      (* indicate negative money value   *)
  150.     monNegativeSpaceSep  - : SHORTINT;       (* determine if separated by space *)
  151.     monNegativeSignPos   - : SHORTINT;       (* position of negative sign       *)
  152.     monNegativeCSPos     - : SHORTINT;       (* position of currency symbol     *)
  153.     reserved3            - : SHORTINT;
  154.   END;
  155.  
  156. CONST
  157. (* constants for Locale.measuringSystem *)
  158.   iso        * = 0;  (* international metric system *)
  159.   american   * = 1;  (* american system             *)
  160.   imperial   * = 2;  (* imperial system             *)
  161.   british    * = 3;  (* british system              *)
  162.  
  163. (* constants for Locale.loc_CalendarType *)
  164.   ct7sun   * = 0;   (* 7 days a week, Sunday is the first day    *)
  165.   ct7mon   * = 1;   (* 7 days a week, Monday is the first day    *)
  166.   ct7tue   * = 2;   (* 7 days a week, Tuesday is the first day   *)
  167.   ct7wed   * = 3;   (* 7 days a week, Wednesday is the first day *)
  168.   ct7thu   * = 4;   (* 7 days a week, Thursday is the first day  *)
  169.   ct7fri   * = 5;   (* 7 days a week, Friday is the first day    *)
  170.   ct7sat   * = 6;   (* 7 days a week, Saturday is the first day  *)
  171.  
  172. (* constants for Locale.monPositiveSpaceSep and Locale.monNegativeSpaceSep   *)
  173.   nospace    * = 0;  (* cur. symbol is NOT separated from value with a space *)
  174.   space      * = 1;  (* cur. symbol IS separated from value with a space     *)
  175.  
  176. (* constants for Locale.monPositiveSignPos and Locale.monNegativeSignPos *)
  177.   parens     * = 0;  (* () surround the quantity and currencySymbol    *)
  178.   precAll    * = 1;  (* sign string comes before amount and symbol     *)
  179.   succAll    * = 2;  (* sign string comes after amount and symbol      *)
  180.   precCurr   * = 3;  (* sign string comes right before currency symbol *)
  181.   succCurr   * = 4;  (* sign string comes right after currency symbol  *)
  182.  
  183. (* constants for Locale.monPositiveCSPos and Locale.monNegativeCSPos *)
  184.   precedes   * = 0;  (* currency symbol comes before value *)
  185.   succeeds   * = 1;  (* currency symbol comes after value  *)
  186.  
  187. (* elements of the byte arrays pointed to by:
  188.  *   Locale.grouping
  189.  *   Locale.fracGrouping
  190.  *   Locale.monGrouping
  191.  *   Locale.monFracGrouping
  192.  * are interpreted as follows:
  193.  *
  194.  *    255     indicates that no further grouping is to be performed
  195.  *    0       indicates that the previous element is to be repeatedly used
  196.  *            for the remainder of the digits
  197.  *    <other> the number of digits that comprises the current group
  198.  *)
  199.  
  200.  
  201. (*****************************************************************************)
  202.  
  203.  
  204. (* Tags for OpenCatalog() *)
  205.   tagBase         * = u.user + 90000H;
  206.   builtInLanguage * = tagBase+1;  (* language of built-in strings    *)
  207.   builtInCodeSet  * = tagBase+2;  (* code set of built-in strings    *)
  208.   version         * = tagBase+3;  (* catalog version number required *)
  209.   language        * = tagBase+4;  (* preferred language of catalog   *)
  210.  
  211.  
  212. (*****************************************************************************)
  213.  
  214.  
  215. (* Comparison types for StrnCmp() *)
  216.   ascii      * = 0;
  217.   collate1   * = 1;
  218.   collate2   * = 2;
  219.  
  220.  
  221. (*****************************************************************************)
  222.  
  223.  
  224. TYPE
  225.  
  226. (* This structure must only be allocated by locale.library and is READ-ONLY! *)
  227.   CatalogPtr * = UNTRACED POINTER TO Catalog;
  228.   Catalog    * = STRUCT (link - : e.Node) (* for internal linkage    *)
  229.     pad       - : INTEGER;     (* to longword align       *)
  230.     language  - : e.LSTRPTR;   (* language of the catalog *)
  231.     codeSet   - : LONGINT;     (* currently always 0      *)
  232.     version   - : INTEGER;     (* version of the catalog  *)
  233.     revision  - : INTEGER;     (* revision of the catalog *)
  234.   END;
  235.  
  236.  
  237. (*****************************************************************************)
  238.  
  239.  
  240.  
  241. VAR
  242.   base * : LocaleBasePtr;
  243.  
  244. (*--- functions in V38 or higher (Release 2.1) ---*)
  245.  
  246. PROCEDURE CloseCatalog  *{base,-36}(catalog{8}       : CatalogPtr);
  247. PROCEDURE CloseLocale   *{base,-42}(locale{8}        : LocalePtr);
  248. PROCEDURE ConvToLower   *{base,-48}(locale{8}        : LocalePtr;
  249.                                     character{0}     : CHAR): CHAR;
  250. PROCEDURE ConvToUpper   *{base,-54}(locale{8}        : LocalePtr;
  251.                                     character{0}     : CHAR): CHAR;
  252. PROCEDURE FormatDate    *{base,-60}(locale{8}        : LocalePtr;
  253.                                     fmtTemplate{9}   : ARRAY OF CHAR;
  254.                                     date{10}         : d.Date;
  255.                                     putCharFunc{11}  : u.HookPtr);
  256. PROCEDURE FormatString  *{base,-66}(locale{8}        : LocalePtr;
  257.                                     fmtTemplate{9}   : ARRAY OF CHAR;
  258.                                     dataStream{10}   : e.ADDRESS;
  259.                                     putCharFunc{11}  : u.HookPtr): e.ADDRESS;
  260. PROCEDURE GetCatalogStr *{base,-72}(catalog{8}       : CatalogPtr;
  261.                                     stringNum{0}     : LONGINT;
  262.                                     defaultString{9} : ARRAY OF CHAR): e.LSTRPTR;
  263. PROCEDURE GetLocaleStr  *{base,-78}(locale{8}        : LocalePtr;
  264.                                     stringNum{0}     : LONGINT): e.LSTRPTR;
  265. PROCEDURE IsAlNum       *{base,-84}(locale{8}        : LocalePtr;
  266.                                     character{0}     : CHAR): BOOLEAN;
  267. PROCEDURE IsAlpha       *{base,-90}(locale{8}        : LocalePtr;
  268.                                     character{0}     : CHAR): BOOLEAN;
  269. PROCEDURE IsCntrl       *{base,-96}(locale{8}        : LocalePtr;
  270.                                     character{0}     : CHAR): BOOLEAN;
  271. PROCEDURE IsDigit      *{base,-102}(locale{8}        : LocalePtr;
  272.                                     character{0}     : CHAR): BOOLEAN;
  273. PROCEDURE IsGraph      *{base,-108}(locale{8}        : LocalePtr;
  274.                                     character{0}     : CHAR): BOOLEAN;
  275. PROCEDURE IsLower      *{base,-114}(locale{8}        : LocalePtr;
  276.                                     character{0}     : CHAR): BOOLEAN;
  277. PROCEDURE IsPrint      *{base,-120}(locale{8}        : LocalePtr;
  278.                                     character{0}     : CHAR): BOOLEAN;
  279. PROCEDURE IsPunct      *{base,-126}(locale{8}        : LocalePtr;
  280.                                     character{0}     : CHAR): BOOLEAN;
  281. PROCEDURE IsSpace      *{base,-132}(locale{8}        : LocalePtr;
  282.                                     character{0}     : CHAR): BOOLEAN;
  283. PROCEDURE IsUpper      *{base,-138}(locale{8}        : LocalePtr;
  284.                                     character{0}     : CHAR): BOOLEAN;
  285. PROCEDURE IsXDigit     *{base,-144}(locale{8}        : LocalePtr;
  286.                                     character{0}     : CHAR): BOOLEAN;
  287. PROCEDURE OpenCatalogA *{base,-150}(locale{8}        : LocalePtr;
  288.                                     name{9}          : ARRAY OF CHAR;
  289.                                     tagList{10}      : ARRAY OF u.TagItem): CatalogPtr;
  290. PROCEDURE OpenCatalog  *{base,-150}(locale{8}        : LocalePtr;
  291.                                     name{9}          : ARRAY OF CHAR;
  292.                                     tag1{10}..       : u.Tag): CatalogPtr;
  293. PROCEDURE OpenLocale   *{base,-156}(name{8}          : ARRAY OF CHAR): LocalePtr;
  294. PROCEDURE ParseDate    *{base,-162}(locale{8}        : LocalePtr;
  295.                                     date{9}          : d.Date;
  296.                                     fmtTemplate{10}     : ARRAY OF CHAR;
  297.                                     getCharFunc{11}  : u.HookPtr): BOOLEAN;
  298. PROCEDURE StrConvert   *{base,-174}(locale{8}        : LocalePtr;
  299.                                     string{9}        : ARRAY OF CHAR;
  300.                                     VAR buffer{10}   : ARRAY OF CHAR;
  301.                                     bufferSize{0}    : LONGINT;
  302.                                     type{1}          : LONGINT): LONGINT;
  303. PROCEDURE StrnCmp      *{base,-180}(locale{8}        : LocalePtr;
  304.                                     string1{9}       : ARRAY OF CHAR;
  305.                                     string2{10}      : ARRAY OF CHAR;
  306.                                     length{0}        : LONGINT;
  307.                                     type{1}          : LONGINT): LONGINT;
  308.  
  309. BEGIN
  310.   base := e.OpenLibrary (localeName, 38);
  311.  
  312. CLOSE
  313.   IF base # NIL THEN e.CloseLibrary (base) END;
  314.  
  315. END Locale.
  316.  
  317.